import { getInfo, sysProfileRequest } from '@/api/user'
import router, { constantRoutes } from '@/router'
import { getToken, setToken } from '@/utils/auth'

export default {
  // 一个vuex要当做模块来使用，需要加一个配置 namespaced
  namespaced: true,
  state: {
    // 这个值默认存储在内存上面，一刷新，一觉就忘记了，所以需要把数据保存在硬盘上面
    // 本地存储的， localStorage sessionStorage cookie
    // cookie 会伴随着http请求头，自动发送给服务器
    // 每次取值的是，先从cookie里面取，然后再给默认值
    token: getToken() || '',
    userInfo: {},
    routes: constantRoutes
  },
  mutations: {
    // 修改state里的数据 mutations方法是唯一能修改state数据的方法
    setTokenMutation(state, payload) {
      state.token = payload
      setToken(payload)
    },
    // 修改用户个人信息
    setUserInfoMutation(state, payload) {
      state.userInfo = payload
    },
    // 动态添加路由信息
    setRoutes(state, payload) {
      state.routes = [...constantRoutes, ...payload]
    }
  },
  actions: {
    // 点击登录
    async loginAction({ commit }, payload) {
      try {
        // 从api中获取数据
        const res = await getInfo(payload)
        // 替换mutations中setTokenMutation的数据然后修改state中的token
        commit('setTokenMutation', res.data)
        // 有token之后跳转到主页
        router.push('/')
      } catch (err) {
        console.log(err)
      }
    },
    // 定义一个获取用户信息的请求 actions
    async getUserInfoAction({ commit }, payload) {
      try {
        // 从api中获取数据
        const res = await sysProfileRequest()
        // 替换mutations中setTokenMutation的数据然后修改state中的userInfo
        commit('setUserInfoMutation', res.data)
        return Promise.resolve(res.data)
      } catch (err) {
        console.log('获取用户个人信息失败')
      }
    },
    // 点击退出
    loginActions({ commit }) {
      commit('setTokenMutation', '')
      commit('setUserInfoMutation', {})
    }
  }
}
